<?php

namespace app\api\controller;

use app\admin\model\PhoneCode;
use think\Config;
use think\Request;

class User extends Base
{
    /**
     * @param Request $request
     * 注册
     */
    public function register(Request $request){
        header('Access-Control-Allow-Origin:*');
        header('Content-Type:application/json; charset=utf-8');
        $res = [];
        $data = $request->post();
        if(!isset($data['phone']) or !isset($data['password']) or !isset($data['msgCode'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        //判断是否注册过
        $user = new \app\admin\model\User();
        $where['phone'] = $data['phone'];
        if($user->getOne($where) != null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '账号已存在';
            $res['status'] = 200;
            echo json_encode($res);die;
        }

        //验证码校验
        $phoneCode = new PhoneCode();
        $where['template'] = 2;
        $where['status'] = 0;
        $where['code'] = $data['msgCode'];
        $where['create_time'] = ['lt',time()+300];
        $rs = $phoneCode->getOne($where);
        if($rs == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '验证码错误或者失效';
            $res['status'] = 200;
            echo json_encode($res);die;
        }
        //注册
        unset($data['msgCode']);
        //密码加盐
        $data['password'] = md5($data['password'].Config::get('salt'));
        $data['lv_end_time'] = 0;
        $data['nike_name'] = '请修改昵称';
        $data['avatar_url'] = 'http://api.bjxlxd.com/static/uploads/useravatar/9.png';
        $data['create_time'] = time();
        if($user->add($data)){
            //删除之前code查询条件，修改状态
            unset($where);
            $where['id'] = $rs['id'];
            $edit['status'] = 1;
            $phoneCode->edit($where,$edit);

            $res['data']['code'] = 1;
            $res['data']['msg'] = '恭喜您,注册成功';
        }else{
            $res['data']['code'] = 0;
            $res['data']['msg'] = '注册失败,请重新获取验证码并注册';
        }
        $res['status'] = 200;
        echo json_encode($res);
    }

    /**
     * @param Request $request
     * 登录
     */
    public function login(Request $request){
        $res = [];
        $data = $request->post();
        if(!isset($data['phone']) or !isset($data['password'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }
        $user = new \app\admin\model\User();
        $where['phone'] = $data['phone'];
        $getPhone = $user->getOne($where);
        if($getPhone == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '账号不存在';
        }else{
            $where['password'] = md5($data['password'].Config::get('salt'));
            $rs = $user->getOne($where);
            if($rs != null){
                $res['data']['code'] = 1;
                $res['data']['msg'] = '登录成功';
                $res['data']['list']['uid'] = $rs['id'];
                $res['data']['list']['status'] = $rs['status'];
                $timetoday = strtotime(date("Y-m-d H:i",time()));
                $token = md5($timetoday.'xinglong');
                $res['data']['token'] = $token;
            }else{
                $res['data']['code'] = 0;
                $res['data']['msg'] = '密码错误';
            }
        }
        $res['status'] = 200;
        echo json_encode($res);
    }

    /**
     * @param Request $request
     * 重置密码
     */
    public function resetPwd(Request $request){
        $data = $request->post();
        $res = [];
        if(!isset($data['phone']) or !isset($data['password']) or !isset($data['msgCode'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        //判断是否注册过
        $user = new \app\admin\model\User();
        $where['phone'] = $data['phone'];
        $userInfo = $user->getOne($where);
        if($userInfo == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '该手机号未注册';
            $res['status'] = 200;
            echo json_encode($res);die;
        }

        //验证码校验
        $phoneCode = new PhoneCode();
        $where['template'] = 3;
        $where['status'] = 0;
        $where['code'] = $data['msgCode'];
        $where['create_time'] = ['lt',time()+300];
        $rs = $phoneCode->getOne($where);
        if($rs == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '验证码错误或者失效';
            $res['status'] = 200;
            echo json_encode($res);die;
        }
        unset($where);
        //重置密码
        $where['phone'] = $data['phone'];
        $update['password'] = md5($data['password'].Config::get('salt'));
        if($user->edit($where, $update)){
            unset($where);
            $where['id'] = $rs['id'];
            $edit['status'] = 1;
            $phoneCode->edit($where,$edit);
            $res['data']['code'] = 1;
            $res['data']['msg'] = '修改成功';
        }else{
            $res['data']['code'] = 0;
            $res['data']['msg'] = '新密码不能与原密码一样';
        }

        $res['status'] = 200;
        echo json_encode($res);
    }

    /**
     * @param Request $request
     * 获取信息
     */
    public function getUserInfo(Request $request){
        $data = $request->post();
        $res = [];
        if(!isset($data['uid'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        $user = new \app\admin\model\User();
        $where['id'] = $data['uid'];
        $user = $user->getOne($where);
        if($user == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '用户不存在';
        }else{
            $res['data']['code'] = 1;
            $res['data']['msg'] = '查询成功';
            $res['data']['list'] = $user;

        }
        $res['status'] = 200;
        echo json_encode($res);

    }

    /**
     * @param Request $request
     * 获取推薦人列表
     */
    public function getUserList(Request $request){

        $data = $request->post();
        $res = [];
        if(!isset($data['uid'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }
        $user = new \app\admin\model\User();
        $where['id'] = $data['uid'];
        $userList = $user->getAll($where);
        if($userList == null){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '用户不存在';
        }else{
            $res['data']['code'] = 1;
            $res['data']['msg'] = '查询成功';
            $res['data']['list'] = $userList;

        }
        $res['status'] = 200;
        echo json_encode($res);

    }

    /**
     * @param Request $request
     * 获取短信验证码 5min
     */
    public function getMsgCode(Request $request){
        header('Access-Control-Allow-Origin:*');
        header('Content-Type:application/json; charset=utf-8');
        $data = $request->post();
        $res = [];
        if(!isset($data['phone']) or !isset($data['template'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        $code = rand(111111, 999999);
        //判断是否60秒内已发送
        $phoneCode = new PhoneCode();
        $where['phone'] = $data['phone'];
        $where['status'] = 0;

        $rs = $phoneCode->getOne($where);
        unset($where);
        if($rs != null){
            if(time()-strtotime($rs['create_time'])<60){
                $res['data']['code'] = 0;
                $res['data']['msg'] = '短信验证码已发送,请1分钟后重试';
                $res['status'] = 200;
                echo json_encode($res);die;
            }
        }
        //如果template值为2直接发短信，如果是1,3需要检测手机是否注册
        $template = true;
        if($data['template'] == 1 or $data['template'] == 3){
            $user = new \app\admin\model\User();
            $where['phone'] = $data['phone'];
            if($user->getOne($where) == null){
                $res['data']['code'] = 0;
                $res['data']['msg'] = '该手机号未注册';
                $res['status'] = 200;
                echo json_encode($res);die;
            }
        }

        //发送短信
        $result = $this->qCloudSms($data['phone'], $data['template'], [$code]);
        $result = $this->object_array($result);
        $res = [];
        if($result['errmsg'] == "OK"){
            //存到数据库
            $addData['phone'] = $data['phone'];
            $addData['code'] = $code;
            $addData['status'] = 0;
            $addData['template'] = $data['template'];
            $addData['create_time'] = time();
            $phoneCode->add($addData);

            $res['data']['code'] = 1;
            $res['data']['msg'] = '短信验证码已发送';
        }else{
            $res['data']['code'] = 0;
            $res['data']['msg'] = '短信验证码失败,请重新尝试';
        }

        $res['status'] = 200;
        echo json_encode($res);
    }

    public function editUser(Request $request){
        $data = $request->post();
        $res = [];
        if(!isset($data['user_id'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        $user = new \app\admin\model\User();
        $where['id'] = $data['user_id'];
        unset($data['user_id']);
        $rs = $user->edit($where,$data);
        if($rs){
            $res['data']['code'] = 1;
            $res['data']['msg'] = '修改成功';
        }else{
            $res['data']['code'] = 0;
            $res['data']['msg'] = '修改失败';
        }
        $res['status'] = 200;
        echo json_encode($res);
    }

    public function editUserAvatar(Request $request){
        $data = $request->post();
        $res = [];
        if(!isset($data['base64']) or !isset($data['user_id'])){
            $res['status'] = 400;
            echo json_encode($res);die;
        }

        $user = new \app\admin\model\User();
        $userWhere['id'] = $data['user_id'];
        $userInfo = $user->getOne($userWhere);
        if(!$userInfo){
            $res['data']['code'] = 0;
            $res['data']['msg'] = '用户不存在';
            $res['status'] = 200;
            echo json_encode($res);die;
        }

        $rs = $this->base64_image_content($data['base64'],'/www/wwwroot/test.bjxlxd.com/public/static/uploads/useravatar',$data['user_id']);
        if($rs){
            $userEdit['avatar_url'] = 'http://api.bjxlxd.com/static/uploads/useravatar/'.$data['user_id'].'.png';
            $user->edit($userWhere,$userEdit);

            $res['data']['code'] = 1;
            $res['data']['msg'] = '修改成功';
            $res['data']['data'] = 'http://api.bjxlxd.com/static/uploads/useravatar/'.$data['user_id'].'.png';
        }else{
            $res['data']['code'] = 0;
            $res['data']['msg'] = '修改失败';
        }
        $res['status'] = 200;
        echo json_encode($res);
    }

    public function base64_image_content($base64_image_content,$path,$user_id){
        echo base64_decode($base64_image_content);die;
        //匹配出图片的格式
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
            $type = $result[2];
            $new_file = $path."/".$user_id.".{$type}";
            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
                return '/'.$new_file;
            }else{
                return false;
            }
        }else{
            return false;
        }
    }

    public function registerAgreement(Request $request){
        $rs = '请务必认真阅读和理解本《用户服务协议》（以下简称《协议》）中规定的所有权利和限制。除非您接受本《协议》条款，否则您无权注册、登录或使用本协议所涉及的相关服务。您一旦注册、登录、使用或以任何方式使用本《协议》所涉及的相关服务的行为将视为对本《协议》的接受，即表示您同意接受本《协议》各项条款的约束。如果您不同意本《协议》中的条款，请不要注册、登录或使用本《协议》相关服务。 本《协议》是用户与”兴龙兄弟网之间的法律协议。

 

1. 服务内容

1.1”兴龙兄弟活动嘉年华网”（以下简称“活动嘉年华”）是全国领先的在线会议活动预定平台。2008年，公司创始人进入灯光舞美行业，经过十年的孕育和成长，开发并成立了专业的策划与设计部门。我们专注于大中型活动策划、会议策划、演出策划、年会策划、展台设计搭建等一体的专业性活动策划。在策划方面拥有丰富的经验和优秀的口碑，并具备视觉形象整体解决方案的能力和资源。设计部门突出的3D设计和灯光预览效果，拥有提前预知现场效果的能力。搭建针对大型企业及活动的资源平台，从酒店会场选择、舞美灯光搭建、到现场执行系统等，提供1对1的一站式服务。

1.2 您一旦注册成功成为用户，您将得到一个密码和帐号，您需要对自己在帐户中的所有活动和事件负全责。如果由于您的过失导致您的帐号和密码脱离您的控制，则由此导致的针对您、或任何第三方造成的损害，您将承担全部责任。

1.3 用户理解并接受，”活动嘉年华”仅提供相关的网络服务，除此之外与相关网络服务有关的设备（如个人电脑、手机、及其他与接入互联网或移动互联网有关的装置）及所需的费用（如为接入互联网而支付的电话费及上网费、为使用移动网而支付的手机费）均应由用户自行负担。

1.4 会员可以通过本系统免费使用以下服务：

1.4.1．"活动嘉年华"的精选场地，定制活动策划服务

（1）本预订系统中已有的场地介绍、活动方案、信息介绍、策划活动定制服务及活动周边服务。

（2）本预订系统中已有的产品服务的预订取消。

1.4.2．"活动嘉年华"的短信和微信服务系统

本网站将免费提供关于会员认证和网站活动的短信及微信。

1.4.3．"活动嘉年华"的邮件服务系统

本网站将定时为会员发送邮件杂志，提供兴龙兄弟的特色产品以及仅针对会员进行的促销活动信息。

1.5 会员信息的处理

1.5.1. 本公司通过业务关系得到的会员个人信息，将作以下用途。

（1）将客户的申请信息用于客户举办会议活动之需要。

（2）为使本公司提供的服务内容更丰富。       

（3）必要时用于同客户进行联系。

（4）用于设施使用情况和使用环境等相关调查，业务合作的设施等面向本公司内部的各类报告（属性的统计、分析等不针对个人的形式）

1.5.2. 通过业务关系得到的会员信息，本公司在下列情况中可提供给业务合作商等第三方。

（1）会员本人同意。

（2）以第1项条款为利用目的必要情况。

（3）为犯罪搜查等警察、检察、法院、律师协会或其同等权限机关的明确请求。

（4）为保护会员的人身、财产安全时的紧急情况。

3. 本公司会根据会员要求，停止向第三方提供会被其识别出本人身份的个人资料。（但是，也有可能无法使用本公司提供的服务）

 

2. 用户使用规则

2.1 用户在申请使用”活动嘉年华”网络服务时，必须向”活动嘉年华”提供准确的个人资料，如个人资料有任何变动，必须及时更新。因用户提供个人资料不准确、不真实而引发的一切后果由用户承担。

2.2 用户应妥善保存帐号、密码，避免以任何脱离用户控制的形式交由他人使用。如用户发现其帐号遭他人非法使用，应立即通知”活动嘉年华”。因黑客行为或用户的保管疏忽导致帐号、密码遭他人非法使用，”活动嘉年华”不承担任何责任。

2.3 用户应当为自身注册帐户下的一切行为负责，因用户行为而导致的用户自身或其他任何第三方的任何损失或损害，”活动嘉年华”不承担责任。

2.4 用户理解并接受”活动嘉年华”提供的服务中可能包括活动方案、广告，用户同意在使用过程中显示”活动嘉年华”和第三方供应商、合作伙伴提供的广告。

2.5 用户在使用”活动嘉年华”网络服务过程中，必须遵循以下原则：

2.5.1 遵守中国有关的法律和法规；

2.5.2 遵守所有与网络服务有关的网络协议、规定和程序；

2.5.3 不得为任何非法目的而使用网络服务系统；

2.5.4 不得利用”活动嘉年华”网络服务系统进行任何可能对互联网或移动网正常运转造成不利影响的行为；

2.5.5 不得利用”活动嘉年华”提供的网络服务上传、展示或传播任何虚假的、骚扰性的、中伤他人的、辱骂性的、恐吓性的、庸俗淫秽的或其他任何非法的信息资料；

2.5.6 不得侵犯”活动嘉年华”和其他任何第三方的专利权、著作权、商标权、名誉权或其他任何合法权益；

2.5.7 不得利用”活动嘉年华”网络服务系统进行任何不利于”兴龙兄弟网”的行为；

2.5.8 如发现任何非法使用用户帐号或帐号出现安全漏洞的情况，应立即通告”活动嘉年华”。

2.6 如用户在使用网络服务时违反任何上述规定，”活动嘉年华”或其授权的人有权要求用户改正或直接采取一切必要的措施（包括但不限于更改或删除用户收藏的内容等、暂停或终止用户使用网络服务的权利）以减轻用户不当行为造成的影响。

 

3. 服务变更、中断或终止

3.1 鉴于网络服务的特殊性，用户同意”活动嘉年华”有权根据业务发展情况随时变更、中断或终止部分或全部的网络服务而无需通知用户，也无需对任何用户或任何第三方承担任何责任；

3.2 用户理解，”活动嘉年华”需要定期或不定期地对提供网络服务的平台（如互联网网站、移动网络等）或相关的设备进行检修或者维护，如因此类情况而造成网络服务在合理时间内的中断，”活动嘉年华”无需为此承担任何责任，但”活动嘉年华”应尽可能事先进行通告。

3.3 如发生下列任何一种情形，”活动嘉年华”有权随时中断或终止向用户提供本《协议》项下的网络服务（包括收费网络服务）而无需对用户或任何第三方承担任何责任：

3.3.1 用户提供的个人资料不真实；

3.3.2 用户违反本《协议》中规定的使用规则和条款。

 

4. 知识产权

4.1 提供的网络服务中包含的任何文本、图片、图形、音频和/或视频资料均受版权、商标和/或其它财产所有权法律的保护，未经相关权利人同意，上述资料均不得用于任何商业目的。

 

5. 隐私保护

5.1 保护用户隐私是”活动嘉年华”的一项基本政策，”活动嘉年华”保证不对外公开或向第三方提供单个用户的注册资料及用户在使用网络服务时存储在”活动嘉年华”的非公开内容，但下列情况除外：

5.1.1 事先获得用户的明确授权；

5.1.2 根据有关的法律法规要求；

5.1.3 按照相关政府主管部门的要求；

5.1.4 为维护社会公众的利益；

5.1.5 为”活动嘉年华”的合法权益。

5.2 ”活动嘉年华”可能会与第三方合作向用户提供相关的网络服务，在此情况下，如该第三方同意承担与”活动嘉年华”同等的保护用户隐私的责任，则”活动嘉年华”有权将用户的注册资料等提供给该第三方。

5.3 在不透露单个用户隐私资料的前提下，”活动嘉年华”有权对整个用户数据库进行分析并对用户数据库进行商业上的利用。

5.4 ”活动嘉年华”制定了以下四项隐私权保护原则，指导我们如何来处理产品中涉及到用户隐私权和用户信息等方面的问题：

（1） 利用我们收集的信息为用户提供有价值的产品和服务。

（2） 开发符合隐私权标准和隐私权惯例的产品。

（3） 将个人信息的收集透明化，并由权威第三方监督。

（4） 尽最大的努力保护我们掌握的信息。

 

6. 免责声明

6.1 ”活动嘉年华”不担保网络服务一定能满足用户的要求，也不担保网络服务不会中断，对网络服务的及时性、安全性、准确性也都不作担保。

6.2”活动嘉年华”不保证为向用户提供便利而设置的外部链接的准确性和完整性，同时，对于该等外部链接指向的任何网页上的内容，”活动嘉年华”不承担任何责任。

6.3 对于因电信系统或互联网网络故障、计算机故障或病毒、信息损坏或丢失、计算机系统问题或其它任何不可抗力原因而产生损失，”活动嘉年华”不承担任何责任，但将尽力减少因此而给用户造成的损失和影响。

 

7. 法律及争议解决

7.1 本协议适用中华人民共和国法律。

7.2 因本协议引起的或与本协议有关的任何争议，各方应友好协商解决；协商不成的，任何一方均可将向北京市大兴区人民法院提起诉讼。

 

8. 其他条款

8.1 如果本协议中的任何条款无论因何种原因部分无效，但本协议的其余条款仍应有效并且有约束力。

8.2 ”活动嘉年华”有权随时根据有关法律、法规的变化以及公司经营状况和经营策略的调整等修改本协议，而无需另行单独通知用户。用户随时通过网站浏览最新服务协议条款，视为用户同意最新服务协议条款，具有法律效力。当发生有关争议时，以最新的协议文本为准。如果不同意”兴龙兄弟网”对本协议相关条款所做的修改，用户有权停止使用网络服务。如果用户继续使用网络服务，则视为用户接受”活动嘉年华”对本协议相关条款所做的修改。

8.3 ”活动嘉年华”对本协议拥有解释权与修改权。';
        $data = $request->post();
        if(isset($data['type'])){
            $res['data']['code'] = 1;
            $res['data']['msg'] = '获取成功';
            $res['data']['data'] = $rs;
            $res['status'] = 200;
            echo json_encode($res);
        }else{
            echo $rs;
        }

    }
}